Jump To:
Technical Q&As
Carbon is a set of APIs that enables C and C++ developers to take advantage of Mac OS X-specific features, including an advanced user interface tool kit, an efficient event-handling mechanism, the Quartz 2D graphics library, and multiprocessing support. In addition, other industry-standard C and C++ APIs are easily available to Carbon developers, providing access to such services as the OpenGL drawing system, the Mach microkernel, and BSD operating-system services. Because Carbon is a collection of C programming interfaces, developers can use virtually any Macintosh C development environment that supports PowerPC to build Carbon applications.

Carbon Resources
A guided introduction and learning path for developers new to Carbon.   Essential information for developers using procedural C.   Descriptions of procedural C programming interface elements.
Document Descriptions
On Off
Display

Sort by
Title
Sorted by
Topic
Sort by
Date
Accessing HTTPS Proxy Settings (HTML) ()
QA1234: Describes how to programatically access Secure Web Proxy information.
Networking 2003-02-19
Allocate and Disk Full Error (HTML) ()
FL12: Discusses a problem with AFP volumes displaying incorrect free space, and returning disk full errors.
Networking 1999-07-21
Calling CloseOpenTransport When Writing an App (HTML) ()
Deprecated - NW36: Identifies a bug in Open Transport 1.1 which means your application must CloseOpenTransport before quitting.
Networking 1996-07-03
Changing the TCP Window Size (HTML)
NW47: Describes how to change the TCP window size in Open Transport.
Networking 1997-03-14
Closing the Connection: OpenTransport (HTML) ()
Deprecated - NW20: Describes an orderly disconnect situation in Open Transport between two nodes.
Networking 1996-03-04
Determining if a Drive is a Network Volume (HTML) ()
NW09: Shows how to determine if a volume is mounted over the network.
Networking 1998-06-01
Discovering all advertised Rendezvous service types (HTML)
QA1337: Explains how to discover all Rendezvous service types being advertised on the local network.
Networking 2004-06-01
Don't forget to cancel your Rendezvous resolve (HTML)
QA1297: Explains why it's important to cancel a Rendezvous resolve operation.
Networking 2003-10-15
Downloading through a proxy server in Mac OS X (HTML)
QA1296: Explains when downloading through a proxy server will work, and when it will fail.
Networking 2003-10-29
Error -3168 (kOTStateChangeErr) and Handoff Endpoints (HTML) ()
Deprecated - NW22: Explains why a kOTStateChangeErr -3168 occurs when there is a handoff endpoint involved.
Networking 1996-04-08
fBroadCastAddr Always Zero (HTML) ()
Deprecated - NW58: Explains why the fBroadcastAddr field may be zero after a call to OTInetGetInterfaceInfo and includes the workaround.
Networking 1999-03-08
Getting a Packet Trace (HTML) ()
QA1176: Lists tools available for looking at the network packets on the wire.
Networking 2004-07-13
Getting the User and Computer Name (HTML)
QA1078: Describes how to get the user and computer name on Mac OS X.
Networking 2001-10-30
How to use the OT modem script engine (HTML) ()
Deprecated - NW50: Shows how to use the Open Transport modem script engine.
Networking 1997-07-11
How to use URL Access with proxy servers (HTML)
Deprecated - QA1074: Explains how to use URL Access with proxy servers.
Networking 2001-10-02
NSL and how it relates to Rendezvous (HTML)
QA1299: Explains the relationship between NSL and Rendezvous.
Networking 2003-09-18
Numerous Small Packet Exchanges Resultin Poor TCP Performance (HTML) ()
NW26: Explains why numerous small package exchanges result in poor TCP performance.
Networking 1998-05-25
Open Transport Error -3208: kEBADFErr (HTML) ()
NW21: Explains why a call to OTSnd may result in a kEBADFErr -3208.
Networking 1996-03-04
Open Transport Errors -3151/-3160 and Option Management (HTML) ()
NW54: Gives possible causes of errors -3151 and -3160 when making an OptionManagement call to set an endpoint.
Networking 1998-04-12
Open Transport Libraries (HTML) ()
NW18: Lists the Open Transport libraries and what to link with for PowerPC and 68K.
Networking 2000-11-03
Open Transport Versions (HTML)
NW64: Lists the current versions of Open Transport and their features.
Networking 2000-05-08
OTScheduleDeferredTask When Task Running (HTML) ()
NW52: Describes what happens when you use OTScheduleDefferedTask to schedule a task that is running.
Networking 1997-10-13
OTScheduleSystemTask Cleanup (HTML) ()
Deprecated - NW37: States the proper way to clean up any pending system tasks scheduled with OTScheduleSystemTask.
Networking 1996-07-03
PPPoE Server for Testing (HTML) ()
QA1252: Describes how to configure Mac OS X as a PPPoE server for testing purposes.
Networking 2003-04-11
Raw IP and Open Transport 2.5.x (HTML)
Deprecated - NW63: Discusses Open Transport 2.5's change to the behavior of raw IP endpoints with IP_HDRINCL set.
Networking 1999-10-25
Receiving UDP Broadcasts (HTML) ()
Deprecated - NW53: Explains why UDP endpoints may never receive UDP broadcast messages.
Networking 1997-11-17
Registering a Rendezvous service multiple times (HTML)
QA1311: Explains why registering the same Rendezvous service twice on the same machine doesn't cause a name conflict.
Networking 2003-10-23
Rendezvous and wake from sleep (HTML)
QA1290: Explains why applications that use Rendezvous should stay registered and continue browsing on sleep.
Networking 2003-09-18
Rendezvous enforces the service type format in Panther (HTML)
QA1198: Explains why registering a Rendezvous service might fail on Panther.
Networking 2004-03-23
Rendezvous enforces the TXT record format in Panther (HTML)
QA1306: Explains how mDNSResponder enforces the proper TXT record format in Panther.
Networking 2004-07-14
The Rendezvous Name is not the Rendezvous name (HTML) ()
QA1228: Explains why you should use the Computer Name when advertising a Rendezvous service.
Networking 2004-03-05
Rendezvous TXT record rate limiting in Panther (HTML)
QA1293: Explains how mDNSResponder implements TXT record rate limiting in Panther.
Networking 2003-10-23
Resolves may return an IPv6 address in Panther (HTML)
QA1298: Explains why you get an IP address of 0.0.0.0 when resolving a Rendezvous service.
Networking 2005-01-10
Sending an Email (HTML)
QA1084: Shows how to create an email in the user's prefered email application.
Networking 2004-11-05
Server Endpoint 'qlen' Limit (HTML) ()
Deprecated - NW38: Tells how to determine the maximum 'qlen' value which limits the number of supported handoff endpoints.
Networking 1996-08-21
Setting request headers in URL Access (HTML) ()
Deprecated - QA1073: Explains how to work around a bug in URL Access when setting request headers.
Networking 2002-09-10
Synchronous TCP OTConnect Client Call Completes Before Server Responds (HTML) ()
Deprecated - NW24: Explains why an OTConnect call will complete before the server responds.
Networking 1996-05-14
T_DATA_REQ vs M_DATA TPI Message Blocks (HTML) ()
NW42: Explains why OT passes data to a TPI module using M_DATA message blocks instead of M_PROTO+T_DATA_REQ.
Networking 1996-10-25
TCP Option Sizes (HTML)
Deprecated - NW27: Tells where to get more information on TCP Option sizes and setting TCP Options.
Networking 1996-05-14
TCP/IP Option Sizes (HTML) ()
NW62: Enumerates the TCP/IP options and their sizes for Open Transport.
Networking 1999-04-26
Updating the TXT record of a Rendezvous service (HTML)
QA1302: Explains how to update a Rendezvous TXT record while running on either Jaguar or Panther.
Networking 2004-07-14
URL Access and the Missing Progress Dialog (HTML) ()
Deprecated - QA1140: Explains a known bug in URL Access related to progress dialogs.
Networking 2002-09-23
URL Access vs. CFNetwork (HTML)
QA1291: Explains when to choose URL Access or CFNetwork when downloading files from within your application.
Networking 2003-10-29
Changing the TCP Window Size (HTML)
NW47: Describes how to change the TCP window size in Open Transport.
Performance 1997-03-14
Disabling a Processor on a Multiprocessor System (HTML) ()
QA1141: Describes how to disable a processor on a multiprocessor system for testing purposes.
Performance 2002-05-22
Error -151 and NewGWorld (HTML)
Deprecated - QD18: Explains what the error code -151 means when in NewGWorld.
Performance 1995-09-15
How do I tell if a particular display is being hardware accelerated by Quartz Extreme? (HTML) ()
QA1218: Describes how to use CGDisplayUsesOpenGLAcceleration to see if a display is accelerated or not.
Performance 2002-12-04
OTScheduleDeferredTask When Task Running (HTML) ()
NW52: Describes what happens when you use OTScheduleDefferedTask to schedule a task that is running.
Performance 1997-10-13
Problem with PaintRgn on 256-color Screens (HTML)
Deprecated - QD23: PaintRgn with RGBForeColor and transfer mode addOver doesn't return color to original on 256-color-screens.
Performance 1995-09-15
Quartz 2D Thread Safety (HTML) ()
QA1238: Explains the thread-safety issues for the Quartz 2D API.
Performance 2003-02-25
Using Temporary Memory with OpenPicture (HTML)
Deprecated - QD20: Provides several techniques of causing OpenPicture to allocate temporary memory for a picture handle.
Performance 1996-02-01
Current GDevice Dependencies (HTML) ()
QA1115: Describes potential problems with creating windows or ports when the current GDevice isn't the main device.
Porting 2002-02-13
Detecting Classic and Carbon X Environments (HTML) ()
OV03: Describes how to find out if your application is running in the Classic environment in Mac OS X.
Porting 2000-10-16
DeviceLoop is for drawing (HTML)
QA1024: Warns of one common misuse of the DeviceLoop API and gives two alternative solutions.
Porting 2001-04-11
Problems recording CopyBits into a PICT on Mac OS X 10.2 (HTML) ()
QA1189: Identifies a problem with CopyBits and PICT on Mac OS X 10.2 and gives a simple workaround.
Porting 2002-11-19
QDFlushPortBuffer (HTML) ()
QD65: Describes a possible solution for window update problems under Carbon.
Porting 2000-11-08
QDSwapPort (HTML) ()
QA1128: Explains when to use QDSwapPort.
Porting 2002-11-06
QuickDraw Text Anti-Aliasing using Quartz 2D (HTML) ()
QA1193: Describes APIs added to Mac OS X to allow applications to draw QD text using CG anti-aliasing.
Porting 2002-10-29
Replacing OpenPort in Carbon (HTML) ()
QD66: Discusses a potential crashing problem when Carbonizing code that uses black and white GrafPorts.
Porting 2000-11-08
Setting environment variables for user processes (HTML)
QA1067: Tells how to set environment variables for user processes.
Porting 2001-10-25
TCP/IP Option Sizes (HTML) ()
NW62: Enumerates the TCP/IP options and their sizes for Open Transport.
Porting 1999-04-26
CGContext Bounds (HTML)
QA1048: Explains how to determine the bounds of a CGContext.
Printing 2001-07-02
CGContextAddLineToPoint, CGContextAddCurveToPoint, et. al. (HTML)
QA1049: Explains why the CGContextAddXYZ APIs don't draw anything immediately.
Printing 2001-07-02
CGContextClosePath (HTML)
QA1046: Explains when you should call CGContextClosePath.
Printing 2001-10-02
Checking for the Printer Driver (HTML)
DV42: Describes a legacy Mac OS technique avoiding system hangs when using serial drivers on USB systems.
Printing 2000-06-19
Drawing a Path Multiple Times (HTML)
QA1047: Explains that path drawing operations consume the path.
Printing 2001-07-02
How do I use PMSessionGetGraphicsContext to get a CGContextRef? (HTML) ()
QA1216: Describes how to use PMSessionSetDocumentFormatGeneration and PMSessionGetGraphicsContext to get a CGContextRef for printing.
Printing 2003-02-25
How to measure CG text (HTML)
QA1051: Explains how to measure Core Graphics text.
Printing 2001-07-02
Printer Queue vs. Printer Name (HTML)
QA1407: Explains the difference between a printer queue and a printer name.
Printing 2005-01-27
Quartz 2D Interpolation (HTML) ()
QA1186: Explains how to control Quartz 2D's image interpolation.
Printing 2002-10-29
Quartz 2D Thread Safety (HTML) ()
QA1238: Explains the thread-safety issues for the Quartz 2D API.
Printing 2003-02-25
Saving the current Core Graphics Path (HTML)
QA1056: Explains that the Core Graphics save and restore GState APIs do not affect the path.
Printing 2001-10-02
SCSIAction and IOSCSIUserClient on Mac OS X 10.2 (HTML) ()
QA1201: Describes migrating to a new API for SCSI Parallel devices starting with Mac OS X 10.2.
Printing 2002-09-13
Turning Off Core Graphics Clipping (HTML)
QA1050: Explains how to clear the clipping path for a CGContext.
Printing 2001-07-02
Unexpected CG state changes (HTML)
QA1045: Explains why the Core Graphics drawing state sometimes changes for no apparent reason.
Printing 2001-07-02
Animating the Cursor at VBL Time (HTML) ()
PS05: Describes animating the cursor under traditional Mac OS.
Process Management 1997-01-09
Avoiding Kernel Event Conflicts (HTML)
QA1063: Documents the namespace for the vendor_code field of the kern_event_msg structure.
Process Management 2001-09-14
Determining user login/logout status (HTML)
QA1133: Tells how to determinine if a user is logged in, and how to get login/logout notification
Process Management 2002-04-08
How do I use kMPCreateTaskSuspendedMask with MPCreateTask? (HTML)
QA1055: Describes how to start a task that has been suspended with the ability to resume it later.
Process Management 2001-07-02
How to define a plst resource in a .r file (HTML)
QA1034: Describes how to include a .plist file in a .r file.
Process Management 2001-05-09
ICLaunchURL, "file:///" URLs and Mac OS X (HTML)
QA1028: Describes problems with ICLaunchURL and "file:///" URLs on Mac OS X.
Process Management 2001-04-20
Is QuickTime thread-safe? (HTML)
QA1088: Discusses thread-safety and reentrancy of the QuickTime library on both Mac & Windows.
Process Management 2001-11-01
MPRemoteCall Contexts (HTML) ()
QA1122: Describes two recently introduced options for the context parameter of MPRemoteCall.
Process Management 2002-02-18
Non Mac OS X Bundled data-fork based Resources (HTML) ()
QA1098: Mac OS X Bundled data-fork based Resources
Process Management 2003-08-20
Open File Limits on Mac OS X (HTML) ()
QA1005: Explains how many files an application can open simultaneously in Mac OS X.
Process Management 2001-02-08
OTScheduleDeferredTask When Task Running (HTML) ()
NW52: Describes what happens when you use OTScheduleDefferedTask to schedule a task that is running.
Process Management 1997-10-13
Power Management; Policy Maker vs. Power Controller (HTML) ()
QA1121: Describes the differences between a Power Management Policy Maker and a Power Management Power Controller.
Process Management 2002-02-13
Process Carbon Events Not Delivered in 10.2 (HTML) ()
QA1181: Work around for a bug in Mac OS X 10.2 that prevents the delivery of process Carbon events.
Process Management 2002-08-27
Programmatically causing restart, shutdown and/or logout (HTML) ()
QA1134: Describes how to programmatically cause restart, shutdown, sleep or logout.
Process Management 2003-02-10
Quartz 2D Thread Safety (HTML) ()
QA1238: Explains the thread-safety issues for the Quartz 2D API.
Process Management 2003-02-25
RunApplicationEventLoop and Thread Manager (HTML)
QA1061: Describes how to yield to cooperative (Thread Manager) threads from a RunApplicationEventLoop-based application.
Process Management 2001-10-10
Setting environment variables for user processes (HTML)
QA1067: Tells how to set environment variables for user processes.
Process Management 2001-10-25
Signals and Threads (HTML) ()
QA1184: Describes how threads and signals interact.
Process Management 2002-08-27
Yielding Time Without Getting Events (HTML)
PS06: Describes how to yield processor time to other processes without accepting user interface events.
Process Management 2000-10-16
Adding a movie reference to a movie (HTML)
QA1376: Demonstrates how to add a reference for a movie to another movie
QuickTime 2004-09-16
Base-Derived async image codecs must implement ImageCodecQueueStarting and ImageCodecQueueStopping (HTML) ()
QA1157: Describes why base-derived codecs that set canAsync must implement ImageCodecQueueStarting and ImageCodecQueueStopping.
QuickTime 2002-07-09
Creating Sub GWorlds using QTNewGWorldFromPtr (HTML)
QA1014: Using QTNewGWorldFromPtr to create sub GWorlds which reference the pixel data of other GWorlds.
QuickTime 2001-03-20
Dynamically registering a bundled component (HTML)
QA1083: Describes how to dynamically register a Component which resides in an Application bundle.
QuickTime 2004-06-07
Extracting DV Fields using QTNewGWorldFromPtr (HTML)
QA1017: Describes using QTNewGWorldFromPtr to access individual fields contained within a frame of DV source.
QuickTime 2001-03-20
Incorrect Inside Macintosh Volume V documentation (HTML)
Deprecated - QD15: Identifies incorrect documentation in Inside Macintosh Volume V regarding the formats of PnPixPat and BkPixPat opcodes.
QuickTime 1995-09-15